import DataHelper from "@/store/DataHelper";
import ItemData from "@/model/ItemData";

class ActionHelper {
    // =========== 数据处理
    dataHelper: DataHelper = new DataHelper('memoData','id');
    memoList: Array<ItemData>;

    constructor() {
        // 获取用户本地的数组对象
        this.memoList = this.readData()
    }
    /*
    * DataHelper 中有方法可以读取到本地存储的数组对象，为啥还要封装方法
    * 1，DataHelper 读取的数据为Object类型的数组，
    * 2. 我们需要使用的是ItemData类型的数组，返回给用户
    * */
    readData(): Array<ItemData> {
        // 1. 读取本地数据，object数据
        let arrObj = this.dataHelper.readData();
        // 2. 将读取到的数据转化为ItemData数组============map数组的方法，将原数组中的每项重新处理，再返回，此方法返回的是一个新的数组
        let arrItem = arrObj.map((ele: any) => {
            let item: ItemData = new ItemData();
            item.id = ele.id
            item.categoryId = ele.categoryId
            item.title = ele.title
            item.content = ele.content
            item.createTime = ele.createTime
            return item
        })
        return arrItem
    }
    getCateName(cateId: number): string {
        const arrNames = [ '工作', '学习', '生活' ]
        return arrNames[cateId]
    }
    // ============ 业务逻辑处理
    // 添加数据
    add(item: ItemData): number {
        item.id = this.dataHelper.addData(item);
        this.memoList.push(item)
        this.dataHelper.saveData(this.memoList)
        return item.id
    }
    // 修改数据
    editData(item: ItemData): void {
        // 找出数组中id相同的对象==============通过find查找到的数据，如果该数据发生变化，则原数组中的这项数据也会发生改变
        let editItem: ItemData | undefined = this.memoList.find(ele => {
            return ele.id == item.id
        })
        // 修改对象的值，覆盖item各个属性的值，
        if(editItem) {
            editItem.categoryId = item.id;
            editItem.title = item.title;
            editItem.content = item.content
        }
        // 更新数据重新保存到localstorage中
        this.dataHelper.saveData(this.memoList)
    }
    // 删除数据-----------业务方法删除不用返回true或者false
    remove(id: number | string): void {
        // 1. 找到要删除数据的索引值
        let index: number = this.memoList.findIndex(ele => ele.id===id)
        // 2. 根据索引值将这个数据从本地，以及memoList中删除
        if(index>-1) {
            this.memoList.splice(index,1)
            this.dataHelper.saveData(this.memoList)
        }

    }
}
export default ActionHelper